package br.com.conciliador.download.negocio;

import java.util.HashMap;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.Session;

import br.com.conciliador.download.vo.DownloadVo;
import br.com.conciliador.util.hibernate.business.R2HbNgc;
import br.com.r2.util.hibernate.business.RestritorHb;

public class DownloadNgc extends R2HbNgc<DownloadVo>
{

   private Map filtroPropriedade = new HashMap();
   private Map restritores = new HashMap();
   
   private static DownloadNgc instancia = null;
 
   public static final int JOIN_PARAMETRO = 1;
   
   public static final int JOIN_USUARIO = 2;
   
   public static final int ST_GERADO = 1;
   
   public static final int ST_BAIXADO = 2;
   
   public static final int ST_CANCELADO = 3;
   
   private DownloadNgc()
   {
      init(restritores, filtroPropriedade, DownloadVo.class);
      addFiltro("dataGeracao", RestritorHb.RESTRITOR_DATA_INICIAL, "filtro.dataGeracaoInicial.dataHora");
      addFiltro("dataGeracao", RestritorHb.RESTRITOR_DATA_FINAL, "filtro.dataGeracaoFinal.dataHora");
      addFiltro("nomeArquivo", RestritorHb.RESTRITOR_LIKE, "nomeArquivo");
   }
   
   public static DownloadNgc getInstancia()
   {
       if (instancia == null)
       {
           instancia = new DownloadNgc();
       }
       return instancia;
   }

   @Override
   protected Map filtroPropriedade()
   {
       return filtroPropriedade;
   }

   @Override
   protected Criteria montaCriteria(Session sessao, int join)
   {
       Criteria criteria = sessao.createCriteria(DownloadVo.class);
       if ((join & JOIN_PARAMETRO) != 0)
       {
          criteria.createCriteria("parametroVo", "parametro", Criteria.INNER_JOIN);
       }
       if ((join & JOIN_USUARIO) != 0)
       {
          criteria.createCriteria("usuarioVo", "usuario", Criteria.INNER_JOIN);
       }
       return criteria;
   }

   @Override
   protected Map restritores()
   {
       return restritores;
   }

}
